Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.09.2010, 14:50
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

сделать более универсальным ajax-вывод
Здравствуйте. Есть JS скрипт:

<script type="text/javascript"> 
// Функция, осуществляющая AJAX запрос 
function loadXMLDoc(method, url) { 
  if(window.XMLHttpRequest) { 
    req = new XMLHttpRequest(); 
    req.onreadystatechange = processReqChange; 
    req.open(method, url, true); 
    req.send(null); 
  } else if (window.ActiveXObject) { 
    req = new ActiveXObject("Microsoft.XMLHTTP"); 
    req.onreadystatechange = processReqChange; 
    req.open(method, url, true); 
    req.send(); 
  } 
} 
// Функция, выполняемая при изменении статуса 
// запроса, если статус  равен 200, данные получены 
function processReqChange() { 
  if(req.readyState == 4) { 
    if(req.status == 200) { 
      getNumber(req.responseText); 
    } else { 
      alert("There was a problem retrieving the XML data:\n" + req.statusText); 
    } 
  } 
} 
// Функция выполняется при щелчке на "ссылке" 
function onClick(prurl) { 
    var url = prurl; 
    loadXMLDoc( "get", url ); 
} 
// Функция записывает в элемент content значение, полученное от сервера 
function getNumber( number ) { 
  var content = document.getElementById( "content" ); 
  content.innerHTML = number;  
} 
</script>


Работает например так:

<a href="#" onClick="onClick('ajax.php?num=1')">ссылка1</a><br>
<div id="content"></div>


Как сделать вывод более универсальным, т.е. чтоб в ссылке можно было указать id элемента в который выводить полученые данные, т.е. можно было использовать выбвод в неограниченое число разных блоков соответствующими ссылками?
Ответить с цитированием
  #2 (permalink)  
Старый 21.09.2010, 21:17
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

Ну то есть надо чтобы можно было задавать в onClick дополнительный параметр - id элемента вывода, что позволило бы многократно использовать вывод в разные блоки на одной странице.

Типо такого:
<a href="#" onClick="onClick('ajax.php?num=3', 'content')>ссылка1</a>


Только как протащить дополнительный параметр функции onClick через весь скрипт?
Ответить с цитированием
  #3 (permalink)  
Старый 22.09.2010, 04:33
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

<script type="text/javascript"> 
// Функция, осуществляющая AJAX запрос 
function loadXMLDoc(method, url, target) { 
  if(window.XMLHttpRequest) { 
    req = new XMLHttpRequest(); 
    req.onreadystatechange = processReqChange; 
    req.open(method, url, true); 
    req.send(null); 
  } else if (window.ActiveXObject) { 
    req = new ActiveXObject("Microsoft.XMLHTTP"); 
    req.onreadystatechange = processReqChange; 
    req.open(method, url, true); 
    req.send(); 
  } 
} 
// Функция, выполняемая при изменении статуса 
// запроса, если статус  равен 200, данные получены 
function processReqChange() { 
  if(req.readyState == 4) { 
    if(req.status == 200) { 
      getNumber(req.responseText, target); 
    } else { 
      alert("There was a problem retrieving the XML data:\n" + req.statusText); 
    } 
  } 
} 
// Функция выполняется при щелчке на "ссылке" 
function onClick(prurl, target) { 
    var url = prurl; 
    loadXMLDoc( "get", url, target ); 
} 
// Функция записывает в элемент content значение, полученное от сервера 
function getNumber( number, target ) { 
  var content = document.getElementById( target || "content" ); 
  content.innerHTML = number;  
} 
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 22.09.2010, 06:50
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

Я пробовал так делать - не получилось. И ваш вариант тоже не работает - ничего не происходит.

Вызываю так:
<a href='#' onClick="onClick('ajax.php?num=3', 'content')">ссылка</a><br>
<div id="content"></div>


Что не так?

Может дело в этой строке(повторяется дважды):
req.onreadystatechange = processReqChange;


так понимаю тут переменной присваивается результат выполнения функции, а параметр не передается?

Последний раз редактировалось LRCenter, 22.09.2010 в 06:54.
Ответить с цитированием
  #5 (permalink)  
Старый 22.09.2010, 17:03
Новичок на форуме
Отправить личное сообщение для aH6y Посмотреть профиль Найти все сообщения от aH6y
 
Регистрация: 12.07.2010
Сообщений: 9

через глобальную переменную
Ответить с цитированием
  #6 (permalink)  
Старый 22.09.2010, 18:47
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

Сообщение от aH6y Посмотреть сообщение
через глобальную переменную
А как в JS задать голбальную?
global var - я так понимаю не работает - этож не php.
А если просто задать вне функции, то не сработает, потому что обработка идет через функции, а они в коде страницы заданы раньше чем обращение к ним.

Как быть то?

Последний раз редактировалось LRCenter, 22.09.2010 в 19:06.
Ответить с цитированием
  #7 (permalink)  
Старый 22.09.2010, 21:39
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

Разобрался с глобальныим переменными. Ввел функцию объявляющую глобальную переменную имени блока.

Рабочий пример, если кому надо. Кстати на этом можно по сути покрыть 90% всех потребностей в ajaxe, или я не прав?

<script type="text/javascript"> 
function vargo(blid) {blidf = blid;}

// Функция, осуществляющая AJAX запрос 
function loadXMLDoc(method, url) { 
  if(window.XMLHttpRequest) { 
    req = new XMLHttpRequest(); 
    req.onreadystatechange = processReqChange; 
    req.open(method, url, true); 
    req.send(null); 
  } else if (window.ActiveXObject) { 
    req = new ActiveXObject("Microsoft.XMLHTTP"); 
    req.onreadystatechange = processReqChange; 
    req.open(method, url, true); 
    req.send(); 
  } 
} 
// Функция, выполняемая при изменении статуса 
// запроса, если статус  равен 200, данные получены 
function processReqChange() { 
  if(req.readyState == 4) { 
    if(req.status == 200) { 
      getNumber(req.responseText); 
    } else { 
      alert("There was a problem retrieving the XML data:\n" + req.statusText); 
    } 
  } 
} 
// Функция выполняется при щелчке на "ссылке" 
function urlbgo(prurl) { 
    var url = prurl; 
    loadXMLDoc( "get", url ); 
} 
// Функция записывает в элемент content значение, полученное от сервера 
function getNumber( number ) { 
  var content = document.getElementById(blidf); 
  content.innerHTML = number;  
} 
</script> 

<span style="color:blue; text-decoration:underline; cursor:pointer" onClick="urlbgo('ajax.php?num=3'); vargo('asd');">ссылка 1</span><br>
<span style="color:blue; text-decoration:underline; cursor:pointer" onClick="urlbgo('ajax.php?num=2'); vargo('asd2');">ссылка 2</span><br>
<span style="color:blue; text-decoration:underline; cursor:pointer" onClick="urlbgo('ajax.php?num=1'); vargo('asd3');">ссылка 3</span><br>

<span id="asd">.</span> | <span id="asd2">.</span> | <span id="asd3">.</span>


exec, aH6y, спасибо за помощь и советы.
Ответить с цитированием
  #8 (permalink)  
Старый 04.11.2010, 08:49
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

Все супер, только вот как бы так сделать что-бы в процессе загрузки\перезагрузки блока в него выводился индикатор ожидания, например просто текст "Ждите..."?
Ответить с цитированием
  #9 (permalink)  
Старый 04.11.2010, 13:12
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

Разобрался. Вставил

var content = document.getElementById(blidf);
content.innerHTML = "Ждите...";


После
if(window.XMLHttpRequest){
Ответить с цитированием
  #10 (permalink)  
Старый 04.11.2010, 22:30
Кандидат Javascript-наук
Отправить личное сообщение для LRCenter Посмотреть профиль Найти все сообщения от LRCenter
 
Регистрация: 22.06.2009
Сообщений: 117

Подскажите что изменить в скрипте чтобы можно было отправлять данные форм. Понятно что "get" на "post" поменять, а в какую переменную сами данные формы пристроить? Непонятно.. объясните.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MooTools Ajax оценщик (простой способ сделать это?) Jumong AJAX и COMET 2 01.06.2010 23:34
Сделать AJAX запрос dumbass88 jQuery 1 11.04.2010 11:46
30(1|2) редирект от сервера. Или как лучше сделать редирект при верной отсылке форма. pizzZ AJAX и COMET 2 18.02.2010 09:06
Ajax и три <form> не работает. Как правильно сделать листание записей из базы данных? vlad275 AJAX и COMET 2 14.12.2009 14:04
вывод таблички из mysql в ajax alexandre AJAX и COMET 40 18.08.2009 11:46